package com.bjpowernode.springboot.interceptor;

import com.bjpowernode.springboot.model.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UserInterceptor implements HandlerInterceptor {


    /**
     *preHandle叫做预处理方法
     *Object handler ： 被拦截的控制器对象
     *      重要：整个项目的入口，门户。
     *
     * 返回值boolean：
     *      true:
     *          请求通过了拦截器的验证可以执行处理器的方法
     *      false:请求没有通过拦截器的验证，只有拦截器preHandle，请求没有被执行。
     *  特点：
     *      1、在控制器方法之前先执行
     *      2、在这个方法中可以获取请求的信息，验证请求是否符合要求。
     *      验证用户是否登录，验证用户是否有权限访问某个连接地址(url),
     *      如果验证失败，可以截断请求。
     */
    long start = System.currentTimeMillis();
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("进入拦截器！");
        start = System.currentTimeMillis();
        //编写业务拦截器的规则
        //从session中获取用户的信息
         User user = (User) request.getSession().getAttribute("user");
         if(null == user){
             //未登录
             response.sendRedirect(request.getContextPath() + "/user/error");
             return false;
         }

         return true;

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("Interceptor cost="+(System.currentTimeMillis()-start));
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}
